home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 October / PCWorld_2006-10_cd.bin / audio-video / mediamonkey / MediaMonkey_2[1].5.4.977.exe / {app} / Scripts / Stats.vbs < prev    next >
Text File  |  2006-09-01  |  36KB  |  662 lines

  1. ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  2. ' This file can be replaced  in one of the future versions,
  3. ' so please if you want to modify it, make  a copy, do your
  4. ' modifications  in that copy and  change Scripts.ini  file 
  5. ' appropriately. 
  6. ' If you do not do this, you will lose  all your changes in
  7. ' this script when you install a new version of MediaMonkey
  8. ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  9.  
  10. ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  11. ' MediaMonkey statistics script
  12. ' This script was adapted by TheRocket from the 
  13. ' MediaMonkey Web Extension (MMWBE) also made by myself.
  14. ' Coded in December 2004 - January 2005.
  15. ' Thanks to Rusty for his suggestions and letting me
  16. ' include this script into the next versions!
  17. ' It shows globaly the songs you have in your MediaMonkey,
  18. ' and what you listen often. It can be a great way to
  19. ' find what type of music a person likes.
  20. ' Send us new statistics ideas in the MediaMonkey Forum!
  21. ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  22.  
  23. Option Explicit
  24.  
  25. Public booStyleOn
  26.  
  27. Const intTopCount = 10
  28.  
  29. Const mmAnchorRight = 4
  30. Const mmAnchorBottom = 8
  31.   
  32. Const mmAlignTop = 1
  33. Const mmAlignBottom = 2
  34. Const mmAlignClient = 5
  35.   
  36. Const mmListDropdown = 2
  37.   
  38. Const mmFormScreenCenter = 4
  39.   
  40. Sub ShowStats()
  41. Dim UI
  42. Dim Form
  43. Dim Foot
  44. Dim Btn
  45. Dim Btn2
  46. Dim WB
  47. Dim doc
  48. Dim DlgWidth
  49.  
  50.   Set UI = SDB.UI
  51.  
  52.   DlgWidth = 500
  53.  
  54.   ' Create the window to be shown
  55.   Set Form = UI.NewForm
  56.   Form.Common.SetRect 50, 50, DlgWidth, 400
  57.   Form.Common.MinWidth = 200
  58.   Form.Common.MinHeight = 150
  59.   Form.FormPosition = mmFormScreenCenter
  60.   Form.Caption = SDB.Localize("MediaMonkey Music Library Statistics")
  61.   Form.StayOnTop = True
  62.  
  63.   ' Create a panel at the bottom of the window
  64.   Set Foot = UI.NewPanel(Form)
  65.   Foot.Common.Align = mmAlignBottom
  66.   Foot.Common.Height = 35
  67.  
  68.   ' Create a button that saves the report
  69.   Set Btn2 = UI.NewButton(Foot)
  70.   Btn2.Caption = SDB.Localize("&Save as...")
  71.   Btn2.Common.SetRect DlgWidth - 255, 6, 150, 24
  72.   'Btn2.Common.Hint = SDB.Localize("Save this report")
  73.   Btn2.Common.Anchors = mmAnchorRight + mmAnchorBottom
  74.   Btn2.UseScript = Script.ScriptPath
  75.   Btn2.OnClickFunc = "SaveAs"
  76.  
  77.   ' Create a button that closes the window
  78.   Set Btn = UI.NewButton(Foot)
  79.   Btn.Caption = SDB.Localize("&Close")
  80.   Btn.Common.SetRect DlgWidth - 100, 6, 85, 24
  81.   'Btn.Common.Hint = SDB.Localize("Close this report")
  82.   Btn.Common.Anchors = mmAnchorRight + mmAnchorBottom
  83.   Btn.UseScript = Script.ScriptPath
  84.   Btn.OnClickFunc = "OnClose"
  85.    
  86.   ' Create a web browser component
  87.   Set WB = UI.NewActiveX(Form, "Shell.Explorer")
  88.   WB.Common.Align = mmAlignClient      ' Fill all client rectangle
  89.   WB.Common.ControlName = "WB"
  90.  
  91.   Form.SavePositionName = "StatisticsWindow"
  92.   Form.Common.Visible = True                ' Only show the form, don't wait for user input
  93.   SDB.Objects("Statistics") = Form  ' Save reference to the form somewhere, otherwise it would simply disappear
  94.   WB.SetHTMLDocument( BuildReport(false))
  95. End Sub
  96.  
  97. Sub OnClose(Btn)
  98.   SDB.Objects("Statistics") = Nothing ' Remove the last reference to our form which also causes it to disappear
  99. End Sub
  100.  
  101. Function Style()
  102.   booStyleOn = Not booStyleOn
  103.   If booStyleOn Then
  104.     Style = ""
  105.   Else
  106.     Style = " class=""Dark"""
  107.   End If
  108. End Function
  109.  
  110. Public Function FormatFileSize(intFileLength)
  111. Dim strSize
  112.     strSize = SDB.Localize("Bytes")
  113.     If intFileLength >= 1024 Then
  114.       intFileLength = Round(intFileLength / 1024)
  115.       strSize = SDB.Localize("KB")
  116.     End If
  117.     If intFileLength >= 1024 Then
  118.       intFileLength = Round(intFileLength / 1024, 2)
  119.       strSize = SDB.Localize("MB")
  120.     End If
  121.     If intFileLength >= 1024 Then
  122.       intFileLength = Round(intFileLength / 1024, 2)
  123.       strSize = SDB.Localize("GB")
  124.     End If
  125.     If intFileLength >= 1024 Then
  126.       intFileLength = Round(intFileLength / 1024, 2)
  127.       strSize = SDB.Localize("TB")
  128.     End If
  129.     FormatFileSize = intFileLength & " " & strSize
  130. End Function
  131.  
  132. Public Function FormatTime(intLength)
  133.   Dim strLength, intLengthHeures, intLengthMinutes, intLengthSecondes, datLength
  134.   Dim strTimeSeparator
  135.   'Find out the current time separator (for some locales, it is a period)
  136.   datLength = TimeSerial(11, 11, 11)
  137.   strLength = FormatDateTime(datLength,vbshorttime)
  138.   strTimeSeparator = left(replace(strLength,"1",""),1)
  139.  
  140.   intLength = CCur(intLength / 1000)
  141.   intLengthHeures = Int(intLength / 60 / 60)
  142.   intLengthMinutes = Int(intLength / 60) Mod 60
  143.   intLengthSecondes = intLength Mod 60
  144.     
  145.   strLength = intLengthHeures & strTimeSeparator
  146.   if intLengthMinutes < 10 then strLength = strLength & "0"
  147.   strLength = strLength & intLengthMinutes & strTimeSeparator
  148.  
  149.   if intLengthSecondes < 10 then strLength = strLength & "0"
  150.   strLength = strLength & intLengthSecondes
  151.  
  152.   FormatTime = strLength
  153. End Function
  154.  
  155.  ' escape XML string
  156. Function MapXML(srcstring)
  157.   srcstring = Replace(srcstring, "&", "&")
  158.   srcstring = Replace(srcstring, "<", "<")
  159.   srcstring = Replace(srcstring, ">", ">")
  160.   Dim i
  161.   i=1
  162.   While i<=Len(srcstring)
  163.     If (AscW(Mid(srcstring, i, 1))>127) Then
  164.       srcstring = Mid( srcstring, 1, i-1)+"&#"+CStr( AscW( Mid( srcstring, i, 1)))+";"+Mid( srcstring, i+1, Len(srcstring))
  165.     End If
  166.     i=i+1
  167.   WEnd
  168.   If srcstring="" Then
  169.     srcstring = " "
  170.   End IF
  171.   MapXML = srcstring
  172. End Function
  173.  
  174.  
  175. Function ExtractText(ByVal inText, ByVal inDebut, ByVal inFin)
  176.     Dim pos1
  177.     Dim pos2
  178.  
  179.     pos1 = InStr(1, inText, inDebut)
  180.     If pos1 = 0 Then pos1 = 1 Else pos1 = pos1 + Len(inDebut)
  181.     pos2 = InStr(pos1, inText, inFin)
  182.     If pos2 < pos1 Then pos2 = Len(inText) + 1
  183.     ExtractText = Mid(inText, pos1, pos2 - pos1)
  184.     
  185. End Function
  186. Function ExtractTextInvert(ByVal inText, ByVal inDebut, ByVal inFin)
  187.     ExtractTextInvert = StrReverse(ExtractText(StrReverse(inText), StrReverse(inDebut), StrReverse(inFin)))
  188. End Function
  189.  
  190. function ExtractPathName(strPath)
  191.   dim StrTemp
  192.   StrTemp= ExtractTextInvert(strPath,"","\")
  193.   ExtractPathName = Left(strPath, Len(strPath) - Len(StrTemp))
  194. end function
  195.  
  196. Function ShowRating(intNo, booForExport)
  197. Dim a
  198.   If intNo = -1 Then
  199.     ShowRating = " "
  200.   ElseIf intNo = 0 Then
  201.     if not booForExport then
  202.       ShowRating = "<img src=""" & ExtractPathName(script.scriptpath) & "\bomb.png"" border=""0"" width=""10"" height=""11"">"
  203.     else
  204.       ShowRating = "0"
  205.     end if
  206.   Else
  207. '    ShowRating = round(intNo / 10) / 2
  208.     For a = 20 To intNo Step 20
  209.       if not booForExport then
  210.         ShowRating = ShowRating & "<img src=""" & ExtractPathName(script.scriptpath) & "\star.png"" width=""10"" height=""11"" border=""0"">"
  211.       else
  212.         ShowRating = ShowRating & "*"
  213.       end if
  214.     Next
  215.   End If
  216.   If (intNo Mod 20) >= 10 Then
  217.     if not booForExport then
  218.       ShowRating = ShowRating & "<img src=""" & ExtractPathName(script.scriptpath) & "\half-star.png"" width=""10"" height=""11"" border=""0"">"
  219.     else
  220.       ShowRating = ShowRating & """
  221.     end if
  222.   End If
  223. End Function
  224.  
  225. function NoNull(VarCanBeNull, varWhenNull)
  226.   if isnull(varcanbenull) then
  227.     NoNull = varWhenNull
  228.   else
  229.     NoNull = varCanBeNull
  230.   end if
  231. end function
  232.  
  233. Sub SaveAS(Btn)
  234.   Dim strExportTo
  235.   Dim booSave
  236.   Dim fout 
  237.   Dim fso
  238.  
  239.   With SDB.CommonDialog
  240.     .DefaultExt = "html"
  241.     '.FileName = SDB.Localize("Save as...")
  242.     .Filter = "HTML (*.htm)|*.htm|All files (*.*)|*.*"
  243.     .Title = SDB.Localize("Exporting...")
  244.     .InitDir = SDB.IniFile.StringValue("Scripts", "LastExportStatsDir")
  245.     .ShowSave
  246.     booSave = .Ok
  247.     strExportTo = .FileName
  248.   End With
  249.  
  250.   if booSave then
  251.     ' Connect to the FileSystemObject
  252.     Set fso = SDB.Tools.FileSystem
  253.  
  254.     ' Create the output file 
  255.     Set fout = fso.CreateTextFile(strExportTo, True) 
  256.  
  257.     ' Write header line 
  258.     fout.Write BuildReport(true) 
  259.     ' Close the output file and finish 
  260.     fout.Close 
  261.     
  262.     set fout = nothing
  263.     set fso = nothing
  264.  
  265.   end if
  266.  
  267. end sub
  268.  
  269. Function BuildReport(booForExport)
  270.   Dim qryStats 
  271.   Dim strSQL
  272.   Dim intArtistsCount
  273.   Dim intArtistsCountPlayed
  274.   Dim intAlbumCount
  275.   Dim intAlbumsCountPlayed
  276.   Dim intGenreCount
  277.   Dim intLength
  278.   Dim intFileLength
  279.   Dim intLengthPlayed
  280.   Dim intFileLengthPlayed
  281.   Dim intYearCount
  282.   Dim intPlaylistCount
  283.   Dim intPlayed
  284.   Dim intAllCount
  285.  
  286.   Dim strOut
  287.  
  288.   strOut = ""
  289.     
  290.   'Building base page
  291.   strOut = strOut & "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">" & vbcrlf
  292.   strOut = strOut & "<html>" & vbcrlf
  293.   strOut = strOut & "  <head>" & vbcrlf
  294.   strOut = strOut & "    <title>" & SDB.Localize("MediaMonkey Music Library Statistics") & "</title>" & vbcrlf
  295.   strOut = strOut & "  </head>" & vbcrlf
  296.  
  297.   strOut = strOut & "<STYLE TYPE=text/css>" & vbcrlf
  298.   strOut = strOut & "body{font-family:'Verdana',sans-serif; background-color:#FFFFFF; font-size:9pt; color:#000000;}" & vbcrlf
  299.   strOut = strOut & "H1{font-family:'Verdana',sans-serif; font-size:13pt; font-weight:bold; color:#AAAAAA; text-align:left}" & vbcrlf
  300.   strOut = strOut & "P{font-family:'Verdana',sans-serif; font-size:9pt; color:#000000;}" & vbcrlf
  301.   strOut = strOut & "TH{font-family:'Verdana',sans-serif; font-size:10pt; font-weight:bold; color:#000000; border-color:#000000; border-style: solid; border-left-width:0px; border-right-width:0px; border-top-width:0px; border-bottom-width:3px;}" & vbcrlf
  302.   strOut = strOut & "TD{font-family:'Verdana',sans-serif; font-size:9pt; color:#000000; border-color:#000000; border-style: solid; border-left-width:0px; border-right-width:0px; border-top-width:0px; border-bottom-width:1px;}" & vbcrlf
  303.   strOut = strOut & "TR.dark{background-color:#EEEEEE}" & vbcrlf
  304.   strOut = strOut & "TR.aleft TH{text-align:left}" & vbcrlf
  305.   strOut = strOut & "</STYLE>" & vbcrlf
  306.  
  307.   strOut = strOut & "  <body>" & vbcrlf
  308.   strOut = strOut & "    <H1>" & SDB.Localize("MediaMonkey Music Library Statistics") & "</H1>" & vbcrlf
  309.   
  310.   'Totals
  311.   strSQL = "SELECT Count(*) As Nombre FROM Artists WHERE ID <> 0"
  312.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  313.   intArtistsCount = CLng(NoNull(qryStats.ValueByName("Nombre"),0))
  314.   
  315.   strSQL = "SELECT Count(*) AS CountOfID FROM (SELECT Artists.ID FROM (Artists INNER JOIN Songs ON Artists.ID = Songs.IDArtist) INNER JOIN Played ON Songs.ID = Played.IdSong GROUP BY Artists.ID)"
  316.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  317.   intArtistsCountPlayed = CLng(NoNull(qryStats.ValueByName("CountOfID"),0))
  318.   
  319.   strSQL = "SELECT Count(*) As Nombre FROM Albums WHERE ID <> 0"
  320.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  321.   intAlbumCount = CLng(NoNull(qryStats.ValueByName("Nombre"),0))
  322.   
  323.   strSQL = "SELECT Count(*) As CountOfID FROM (SELECT Albums.ID FROM albums INNER JOIN (Songs INNER JOIN Played ON Songs.ID = Played.IdSong) ON Albums.ID = Songs.IDAlbum GROUP BY Albums.ID)"
  324.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  325.   intAlbumsCountPlayed = CLng(NoNull(qryStats.ValueByName("CountOfID"),0))
  326.   
  327.   strSQL = "SELECT Count(QryTemp.IDGenre) AS Nombre FROM (SELECT Genres.IDGenre FROM Songs INNER JOIN Genres ON Songs.Genre = Genres.IDGenre GROUP BY Genres.IDGenre) as QryTemp"
  328.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  329.   intGenreCount = CLng(NoNull(qryStats.ValueByName("Nombre"),0))
  330.   
  331.   strSQL = "SELECT Count(QryTemp.Year) AS Nombre FROM (SELECT Songs.Year FROM Songs GROUP BY Songs.Year HAVING Songs.Year <> -1) as QryTemp"
  332.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  333.   intYearCount = CLng(NoNull(qryStats.ValueByName("Nombre"),0))
  334.       
  335.   strSQL = "SELECT Count(*) As Nombre FROM PlayLists WHERE (ISAutoPlayList is null)"
  336.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  337.   intPlaylistCount = CLng(NoNull(qryStats.ValueByName("Nombre"),0))
  338.   
  339.   strSQL = "SELECT Count(*) As Nombre FROM Played"
  340.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  341.   intPlayed = CLng(NoNull(qryStats.ValueByName("Nombre"),0))
  342.   
  343.   strSQL = "SELECT Count(*) As Nombre, Sum(SongLength) as TotalLength, Sum(FileLength) as TotalFileLength FROM Songs"
  344.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  345.   intAllCount = CLng(NoNull(qryStats.StringByName("Nombre"),0))
  346.   intLength = CCur(NoNull(qryStats.ValueByName("TotalLength"),0))
  347.   intFileLength = CCur(NoNull(qryStats.ValueByName("TotalFileLength"),0))
  348.   
  349.   strSQL = "SELECT Sum(SongLength) as TotalLength, Sum(FileLength) as TotalFileLength FROM Songs INNER JOIN Played ON Songs.ID = Played.IdSong"
  350.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  351.   intLengthPlayed = CCur(NoNull(qryStats.ValueByName("TotalLength"),0))
  352.   intFileLengthPlayed = CCur(NoNull(qryStats.ValueByName("TotalFileLength"),0))
  353.   
  354.   strOut = strOut & "      <p/>" & vbcrlf
  355.   strOut = strOut & "        <table border=""0"" cellspacing=""0"" cellpadding=""4"" width=""100%"">" & vbcrlf
  356.   strOut = strOut & "          <tr><th colspan=""3"">" & SDB.Localize("Totals") & "</th></tr>" & vbcrlf
  357.   strOut = strOut & "          <tr class=""aleft""><th>" & SDB.Localize("Type") & "</th><th>" & SDB.Localize("Library") & "</th><th>" & SDB.Localize("Played") & "</th></tr>" & vbcrlf
  358.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Artists") & "</td><td>" & intArtistsCount & "</td><td>" & intArtistsCountPlayed & "</td></tr>" & vbcrlf
  359.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Albums") & "</td><td>" & intAlbumCount & "</td><td>" & intAlbumsCountPlayed & "</td></tr>" & vbcrlf
  360.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Genres") & "</td><td>" & intGenreCount & "</td><td>-</td></tr>" & vbcrlf
  361.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Years") & "</td><td>" & intYearCount & "</td><td>-</td></tr>" & vbcrlf
  362.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Playlists") & "</td><td>" & intPlaylistCount & "</td><td>-</td></tr>" & vbcrlf
  363.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Tracks") & "</td><td>" & intAllCount & "</td><td>" & intPlayed & "</td></tr>" & vbcrlf
  364.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Length") & " (h:mm:ss)</td><td>" & FormatTime(intLength) & "</td><td>" & FormatTime(intLengthPlayed) & "</td></tr>" & vbcrlf
  365.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("File size") & "</td><td>" & FormatFileSize(intFileLength) & "</td><td>" & FormatFileSize(intFileLengthPlayed) & "</td></tr>" & vbcrlf
  366.   'strOut = strOut & "          <tr><td colspan=""3"">* = " & SDB.Localize("Parts of item played") & "</td></tr>" & vbcrlf
  367.   strOut = strOut & "        </table>" & vbcrlf
  368.   strOut = strOut & "      <p/>" & vbcrlf
  369.   
  370.   'Averages
  371.   Dim intAvgYear
  372.   Dim intAvgBitrate
  373.   Dim intAvgRating
  374.   Dim intTracksPerAlbum
  375.   Dim intSongsPerGenre
  376.   Dim intPlayPerDay
  377.   Dim intPlayedRating
  378.   Dim intSongsPerArtist
  379.   Dim intSongsPerYear
  380.   Dim intSongsPerRating
  381.   
  382.   strSQL = "SELECT avg(QryTemp.Year) AS avgYear FROM (SELECT Songs.Year FROM Songs GROUP BY Songs.Year HAVING Songs.Year <> -1) as QryTemp"
  383.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  384.   intAvgYear = CCur(NoNull(qryStats.ValueByName("avgYear"),0))
  385.  
  386.   strSQL = "SELECT Avg(SongLength) as AvgLength, Avg(FileLength) as AvgFileLength, Avg(Bitrate) as AvgBitrate FROM Songs"
  387.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  388.   intLength = CCur(NoNull(qryStats.ValueByName("AvgLength"),0))
  389.   intFileLength = CCur(NoNull(qryStats.ValueByName("AvgFileLength"),0))
  390.   intAvgBitrate = CCur(NoNull(qryStats.ValueByName("AvgBitrate"),0))
  391.  
  392.   strSQL = "SELECT Avg(Songs.Rating) AS AvgRating FROM Songs HAVING Songs.Rating <> -1"
  393.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  394.   intAvgRating = CCur(NoNull(qryStats.ValueByName("AvgRating"),0))
  395.  
  396.   strSQL = "SELECT Avg(SongLength) as AvgLength, Avg(FileLength) as AvgFileLength FROM Songs INNER JOIN Played ON Songs.ID = Played.IdSong"
  397.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  398.   intLengthPlayed = CCur(NoNull(qryStats.ValueByName("AvgLength"),0))
  399.   intFileLengthPlayed = CCur(NoNull(qryStats.ValueByName("AvgFileLength"),0))
  400.   
  401.   strSQL = "Select Avg(CountOfID) AS AVGTracks FROM ("
  402.   strSQL = strSQL & "SELECT Count(Songs.ID) AS CountOfID "
  403.   strSQL = strSQL & "FROM Songs INNER JOIN Albums ON Songs.IDAlbum = Albums.ID "
  404.   strSQL = strSQL & "GROUP BY Albums.ID)"
  405.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  406.   intTracksPerAlbum = CCur(NoNull(qryStats.ValueByName("AVGTracks"),0))
  407.   
  408.   strSQL = "SELECT Avg(CountOfID) AS AVGPlayed FROM (SELECT Count(Songs.ID) AS CountOfID " 
  409.   strSQL = strSQL & "FROM Songs INNER JOIN Played ON Songs.ID = Played.IdSong "
  410.   strSQL = strSQL & "GROUP BY int(Played.PlayDate))"
  411.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  412.   intPlayPerDay = CCur(NoNull(qryStats.ValueByName("AVGPlayed"),0))
  413.  
  414.   strSQL = "SELECT Avg(Songs.Rating) AS AvgRatingPlayed FROM Songs INNER JOIN Played ON Songs.ID = Played.IdSong HAVING Songs.Rating <> -1"
  415.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  416.   intPlayedRating = CCur(NoNull(qryStats.ValueByName("AvgRatingPlayed"),0))
  417.   
  418.   strSQL = "Select Avg(CountOfID) AS AVGGenre FROM ("
  419.   strSQL = strSQL & "SELECT Count(Songs.ID) AS CountOfID "
  420.   strSQL = strSQL & "FROM Songs INNER JOIN Genres ON Songs.Genre = Genres.IDGenre "
  421.   strSQL = strSQL & "GROUP BY Genres.IDGenre)"
  422.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  423.   intSongsPerGenre = CCur(NoNull(qryStats.ValueByName("AVGGenre"),0))
  424.   
  425.   strSQL = "Select Avg(CountOfID) AS AVGArtist FROM ("
  426.   strSQL = strSQL & "SELECT Count(Songs.ID) AS CountOfID "
  427.   strSQL = strSQL & "FROM Songs INNER JOIN Artists ON Songs.IdArtist = Artists.ID "
  428.   strSQL = strSQL & "GROUP BY Artists.ID)"
  429.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  430.   intSongsPerArtist = CCur(NoNull(qryStats.ValueByName("AVGArtist"),0))
  431.   
  432.   strSQL = "Select Avg(CountOfID) AS AVGYear FROM ("
  433.   strSQL = strSQL & "SELECT Count(Songs.ID) AS CountOfID "
  434.   'strSQL = strSQL & "FROM Songs "
  435.   strSQL = strSQL & "FROM Songs WHERE Songs.Year <> -1 "
  436.   strSQL = strSQL & "GROUP BY Songs.Year)"
  437.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  438.   intSongsPerYear = CCur(NoNull(qryStats.ValueByName("AVGYear"),0))
  439.   
  440.   strSQL = "Select Avg(CountOfID) AS AVGTracksRating FROM ("
  441.   strSQL = strSQL & "SELECT Count(Songs.ID) AS CountOfID "
  442.   'strSQL = strSQL & "FROM Songs "
  443.   strSQL = strSQL & "FROM Songs WHERE Songs.Rating <> -1 "
  444.   strSQL = strSQL & "GROUP BY Songs.Rating)"
  445.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  446.   intSongsPerRating = CCur(NoNull(qryStats.ValueByName("AVGTracksRating"),0))
  447.   
  448.   strOut = strOut & "        <table border=""0"" cellspacing=""0"" cellpadding=""4"" width=""100%"">" & vbcrlf
  449.   strOut = strOut & "          <tr><th colspan=""3"">" & SDB.Localize("Averages") & "</th></tr>" & vbcrlf
  450.   strOut = strOut & "          <tr class=""aleft""><th>" & SDB.Localize("Type") & "</th><th>" & SDB.Localize("Library") & "</th><th>" & SDB.Localize("Played") & "</th></tr>" & vbcrlf
  451.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Tracks per Artist") & "</td><td>" & Round(intSongsPerArtist, 1) & "</td><td>-</td></tr>" & vbcrlf
  452.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Tracks per Album") & "</td><td>" & Round(intTracksPerAlbum, 1) & "</td><td>-</td></tr>" & vbcrlf
  453.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Tracks per Genre") & "</td><td>" & Round(intSongsPerGenre, 1) & "</td><td>-</td></tr>" & vbcrlf
  454.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Tracks per Year") & "</td><td>" & Round(intSongsPerYear, 1) & "</td><td>-</td></tr>" & vbcrlf
  455.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Tracks per Rating") & "</td><td>" & Round(intSongsPerRating, 1) & "</td><td>-</td></tr>" & vbcrlf
  456.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Bitrate (kbps)") & "</td><td>" & Round(intAvgBitrate/1000) & "</td><td>-</td></tr>" & vbcrlf
  457.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Year") & "</td><td>" & Round(intAvgYear) & "</td><td>-</td></tr>" & vbcrlf
  458.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Tracks played per day") & "</td><td>-</td><td>" & Round(intPlayPerDay, 1) & "</td></tr>" & vbcrlf
  459.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Rating") & "</td><td>" & ShowRating(Round(intAvgRating),booForExport) & "</td><td>" & ShowRating(Round(intPlayedRating),booForExport) & "</td></tr>" & vbcrlf
  460.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("Length") & " (h:mm:ss)</td><td>" & FormatTime(intLength) & "</td><td>" & FormatTime(intLengthPlayed) & "</td></tr>" & vbcrlf
  461.   strOut = strOut & "          <tr" & Style & "><td>" & SDB.Localize("File size") & "</td><td>" & FormatFileSize(intFileLength) & "</td><td>" & FormatFileSize(intFileLengthPlayed) & "</td></tr>" & vbcrlf
  462.   strOut = strOut & "        </table>" & vbcrlf
  463.   strOut = strOut & "      <p/>" & vbcrlf
  464.  
  465.   'Top 10 Artists
  466.   strOut = strOut & "        <table border=""0"" cellspacing=""0"" cellpadding=""4"" width=""100%"">" & vbcrlf
  467.   strOut = strOut & "          <tr><th colspan=""4"">" & SDB.Localize("Top " & intTopCount & " Artists") & "</th></tr>" & vbcrlf
  468.   strOut = strOut & "          <tr class=""aleft"">" & vbcrlf
  469.   strOut = strOut & "            <th>" & SDB.Localize("Tracks") & "</th>" & vbcrlf
  470.   strOut = strOut & "            <th>" & SDB.Localize("Artist") & "</th>" & vbcrlf
  471.   strOut = strOut & "            <th>" & SDB.Localize("Length") & "</th>" & vbcrlf
  472.   strOut = strOut & "            <th>" & SDB.Localize("File size") & "</th>" & vbcrlf
  473.   strOut = strOut & "          </tr>" & vbcrlf
  474.   strSQL = "SELECT TOP " & intTopCount & " Artists.ID, Artists.Artist, Count(Songs.ID) AS CountOfID, Sum(SongLength) as TotalLength, Sum(FileLength) as TotalFileLength FROM Artists INNER JOIN Songs ON Artists.ID = Songs.IDArtist GROUP BY Artists.ID, Artists.Artist ORDER BY Count(Songs.ID) DESC"
  475.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  476.   While Not qryStats.EOF
  477.   strOut = strOut & "          <tr" & Style() & ">" & vbcrlf
  478.   strOut = strOut & "            <td>" & qryStats.StringByName("CountOfID") & "</td>" & vbcrlf
  479.   strOut = strOut & "            <td>" & MapXML(qryStats.StringByName("Artist")) & "</td>" & vbcrlf
  480.   strOut = strOut & "            <td>" & FormatTime(CCur(qryStats.ValueByName("TotalLength"))) & "</td>" & vbcrlf
  481.   strOut = strOut & "            <td>" & FormatFileSize(CCur(qryStats.ValueByName("TotalFileLength"))) & "</td>" & vbcrlf
  482.   strOut = strOut & "          </tr>" & vbcrlf
  483.     qryStats.Next
  484.   Wend
  485.   strOut = strOut & "        </table>" & vbcrlf
  486.   strOut = strOut & "      <p/>" & vbcrlf
  487.   
  488.   'Top 10 Artists Played
  489.   strOut = strOut & "        <table border=""0"" cellspacing=""0"" cellpadding=""4"" width=""100%"">" & vbcrlf
  490.   strOut = strOut & "          <tr><th colspan=""4"">" & SDB.Localize("Top " & intTopCount & " Artists played") & "</th></tr>" & vbcrlf
  491.   strOut = strOut & "          <tr class=""aleft"">" & vbcrlf
  492.   strOut = strOut & "            <th>" & SDB.Localize("Tracks") & "</th>" & vbcrlf
  493.   strOut = strOut & "            <th>" & SDB.Localize("Artist") & "</th>" & vbcrlf
  494.   strOut = strOut & "            <th>" & SDB.Localize("Length") & "</th>" & vbcrlf
  495.   strOut = strOut & "            <th>" & SDB.Localize("File size") & "</th>" & vbcrlf
  496.   strOut = strOut & "          </tr>" & vbcrlf
  497.   strSQL = "SELECT TOP " & intTopCount & " Artists.ID, Artists.Artist, Count(Songs.ID) AS CountOfID, Sum(SongLength) as TotalLength, Sum(FileLength) as TotalFileLength FROM (Artists INNER JOIN Songs ON Artists.ID = Songs.IDArtist) INNER JOIN Played ON Songs.ID = Played.IdSong GROUP BY Artists.ID, Artists.Artist ORDER BY Count(Songs.ID) DESC"
  498.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  499.   While Not qryStats.EOF
  500.   strOut = strOut & "          <tr" & Style() & ">" & vbcrlf
  501.   strOut = strOut & "            <td>" & qryStats.StringByName("CountOfID") & "</td>" & vbcrlf
  502.   strOut = strOut & "            <td>" & MapXML(qryStats.StringByName("Artist")) & "</td>" & vbcrlf
  503.   strOut = strOut & "            <td>" & FormatTime(CCur(qryStats.ValueByName("TotalLength"))) & "</td>" & vbcrlf
  504.   strOut = strOut & "            <td>" & FormatFileSize(CCur(qryStats.ValueByName("TotalFileLength"))) & "</td>" & vbcrlf
  505.   strOut = strOut & "          </tr>" & vbcrlf
  506.     qryStats.Next
  507.   Wend
  508.   strOut = strOut & "        </table>" & vbcrlf
  509.   strOut = strOut & "      <p/>" & vbcrlf
  510.  
  511.   'Top 10 Albums
  512.   'strOut = strOut & "        <table border=""0"" cellspacing=""0"" cellpadding=""0"" width=""100%"">" & vbcrlf
  513.   'strOut = strOut & "          <tr><th colspan=""4"">" & SDB.Localize("Top") & " " & intTopCount & " " & SDB.Localize("Albums") & "</th></tr>" & vbcrlf
  514.   'strOut = strOut & "          <tr class=""aleft"">" & vbcrlf
  515.   'strOut = strOut & "            <th>" & SDB.Localize("Tracks") & "</th>" & vbcrlf
  516.   'strOut = strOut & "            <th>" & SDB.Localize("Album") & "</th>" & vbcrlf
  517.   'strOut = strOut & "            <th>" & SDB.Localize("Length") & "</th>" & vbcrlf
  518.   'strOut = strOut & "            <th>" & SDB.Localize("File size") & "</th>" & vbcrlf
  519.   'strOut = strOut & "          </tr>" & vbcrlf
  520.   'strSQL = "SELECT TOP " & intTopCount & " Albums.ID, Artists.Artist, Albums.Album, Count(Songs.ID) AS CountOfID, Sum(SongLength) as TotalLength, Sum(FileLength) as TotalFileLength FROM (Albums INNER JOIN Songs ON Albums.ID = Songs.IDAlbum) INNER JOIN Artists ON Albums.IDArtist = Artists.ID WHERE (((Albums.ID)<>0)) GROUP BY Albums.ID, Artists.ID, Artists.Artist, Albums.Album ORDER BY Count(Songs.ID) DESC"
  521.   'Set qryStats = SDB.Database.OpenSQL(strSQL)
  522.   'While Not qryStats.EOF
  523.   'strOut = strOut & "          <tr" & Style() & ">" & vbcrlf
  524.   'strOut = strOut & "            <td>" & qryStats.StringByName("CountOfID") & "</td>" & vbcrlf
  525.   'strOut = strOut & "            <td>" & MapXML(qryStats.StringByName("Artist")) & " - " & MapXML(qryStats.StringByName("Album")) & "</td>" & vbcrlf
  526.   'strOut = strOut & "            <td>" & FormatTime(CCur(qryStats.ValueByName("TotalLength"))) & "</td>" & vbcrlf
  527.   'strOut = strOut & "            <td>" & FormatFileSize(CCur(qryStats.ValueByName("TotalFileLength"))) & "</td>" & vbcrlf
  528.   'strOut = strOut & "          </tr>" & vbcrlf
  529.   '  qryStats.Next
  530.   'Wend
  531.   'strOut = strOut & "        </table>" & vbcrlf
  532.   'strOut = strOut & "      <p/>" & vbcrlf
  533.  
  534.   'Top 10 Albums played
  535.   strOut = strOut & "        <table border=""0"" cellspacing=""0"" cellpadding=""4"" width=""100%"">" & vbcrlf
  536.   strOut = strOut & "          <tr><th colspan=""4"">" & SDB.Localize("Top " & intTopCount & " Albums played") & "</th></tr>" & vbcrlf
  537.   strOut = strOut & "          <tr class=""aleft"">" & vbcrlf
  538.   strOut = strOut & "            <th>" & SDB.Localize("Tracks") & "</th>" & vbcrlf
  539.   strOut = strOut & "            <th>" & SDB.Localize("Album") & "</th>" & vbcrlf
  540.   strOut = strOut & "            <th>" & SDB.Localize("Length") & "</th>" & vbcrlf
  541.   strOut = strOut & "            <th>" & SDB.Localize("File size") & "</th>" & vbcrlf
  542.   strOut = strOut & "          </tr>" & vbcrlf
  543.   strSQL = "SELECT TOP " & intTopCount & " Albums.ID, Artists.ID as ArID, Artists.Artist, Albums.Album, Count(Songs.ID) AS CountOfID, Sum(SongLength) as TotalLength, Sum(FileLength) as TotalFileLength FROM ((Albums INNER JOIN Songs ON Albums.ID = Songs.IDAlbum) INNER JOIN Artists ON Albums.IDArtist = Artists.ID) INNER JOIN Played ON Songs.ID = Played.IdSong WHERE (((Albums.ID)<>0)) GROUP BY Albums.ID, Artists.ID, Artists.Artist, Albums.Album ORDER BY Count(Songs.ID) DESC"
  544.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  545.   While Not qryStats.EOF
  546.   strOut = strOut & "          <tr" & Style() & ">" & vbcrlf
  547.   strOut = strOut & "            <td>" & qryStats.StringByName("CountOfID") & "</td>" & vbcrlf
  548.   strOut = strOut & "            <td>" & MapXML(qryStats.StringByName("Artist")) & " - " & MapXML(qryStats.StringByName("Album")) & "</td>" & vbcrlf
  549.   strOut = strOut & "            <td>" & FormatTime(CCur(qryStats.ValueByName("TotalLength"))) & "</td>" & vbcrlf
  550.   strOut = strOut & "            <td>" & FormatFileSize(CCur(qryStats.ValueByName("TotalFileLength"))) & "</td>" & vbcrlf
  551.   strOut = strOut & "          </tr>" & vbcrlf
  552.     qryStats.Next
  553.   Wend
  554.   strOut = strOut & "        </table>" & vbcrlf
  555.   strOut = strOut & "      <p/>" & vbcrlf
  556.   
  557.   'Top 10 Genres
  558.   strOut = strOut & "        <table border=""0"" cellspacing=""0"" cellpadding=""4"" width=""100%"">" & vbcrlf
  559.   strOut = strOut & "          <tr><th colspan=""4"">" & SDB.Localize("Top " & intTopCount & " Genres") & "</th></tr>" & vbcrlf
  560.   strOut = strOut & "          <tr class=""aleft"">" & vbcrlf
  561.   strOut = strOut & "            <th>" & SDB.Localize("Tracks") & "</th>" & vbcrlf
  562.   strOut = strOut & "            <th>" & SDB.Localize("Genre") & "</th>" & vbcrlf
  563.   strOut = strOut & "            <th>" & SDB.Localize("Length") & "</th>" & vbcrlf
  564.   strOut = strOut & "            <th>" & SDB.Localize("File size") & "</th>" & vbcrlf
  565.   strOut = strOut & "          </tr>" & vbcrlf
  566.   strSQL = "SELECT TOP " & intTopCount & " Genres.IDGenre, Genres.GenreName, Count(Songs.ID) AS CountOfID, Sum(SongLength) as TotalLength, Sum(FileLength) as TotalFileLength FROM Songs INNER JOIN Genres ON Songs.Genre = Genres.IDGenre GROUP BY Genres.IDGenre, Genres.GenreName ORDER BY Count(Songs.ID) DESC"
  567.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  568.   While Not qryStats.EOF
  569.   strOut = strOut & "          <tr" & Style() & ">" & vbcrlf
  570.   strOut = strOut & "            <td>" & qryStats.StringByName("CountOfID") & "</td>" & vbcrlf
  571.   strOut = strOut & "            <td>" & MapXML(qryStats.StringByName("GenreName")) & "</td>" & vbcrlf
  572.   strOut = strOut & "            <td>" & FormatTime(CCur(qryStats.ValueByName("TotalLength"))) & "</td>" & vbcrlf
  573.   strOut = strOut & "            <td>" & FormatFileSize(CCur(qryStats.ValueByName("TotalFileLength"))) & "</td>" & vbcrlf
  574.   strOut = strOut & "          </tr>" & vbcrlf
  575.     qryStats.Next
  576.   Wend
  577.   strOut = strOut & "        </table>" & vbcrlf
  578.   strOut = strOut & "      <p/>" & vbcrlf
  579.   
  580.   'Top 10 genres played
  581.   strOut = strOut & "        <table border=""0"" cellspacing=""0"" cellpadding=""4"" width=""100%"">" & vbcrlf
  582.   strOut = strOut & "          <tr><th colspan=""4"">" & SDB.Localize("Top " & intTopCount & " Genres played") & "</th></tr>" & vbcrlf
  583.   strOut = strOut & "          <tr class=""aleft"">" & vbcrlf
  584.   strOut = strOut & "            <th>" & SDB.Localize("Tracks") & "</th>" & vbcrlf
  585.   strOut = strOut & "            <th>" & SDB.Localize("Genre") & "</th>" & vbcrlf
  586.   strOut = strOut & "            <th>" & SDB.Localize("Length") & "</th>" & vbcrlf
  587.   strOut = strOut & "            <th>" & SDB.Localize("File size") & "</th>" & vbcrlf
  588.   strOut = strOut & "          </tr>" & vbcrlf
  589.   strSQL = "SELECT TOP " & intTopCount & " Genres.IDGenre, Genres.GenreName, Count(Songs.ID) AS CountOfID, Sum(SongLength) as TotalLength, Sum(FileLength) as TotalFileLength FROM (Songs INNER JOIN Genres ON Songs.Genre = Genres.IDGenre) INNER JOIN Played ON Songs.ID = Played.IdSong GROUP BY Genres.IDGenre, Genres.GenreName ORDER BY Count(Songs.ID) DESC"
  590.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  591.   While Not qryStats.EOF
  592.   strOut = strOut & "          <tr" & Style() & ">" & vbcrlf
  593.   strOut = strOut & "            <td>" & qryStats.StringByName("CountOfID") & "</td>" & vbcrlf
  594.   strOut = strOut & "            <td>" & MapXML(qryStats.StringByName("GenreName")) & "</td>" & vbcrlf
  595.   strOut = strOut & "            <td>" & FormatTime(CCur(qryStats.ValueByName("TotalLength"))) & "</td>" & vbcrlf
  596.   strOut = strOut & "            <td>" & FormatFileSize(CCur(qryStats.ValueByName("TotalFileLength"))) & "</td>" & vbcrlf
  597.   strOut = strOut & "          </tr>" & vbcrlf
  598.     qryStats.Next
  599.   Wend
  600.   strOut = strOut & "        </table>" & vbcrlf
  601.   strOut = strOut & "      <p/>" & vbcrlf
  602.   
  603.   'ratings
  604.   strOut = strOut & "        <table border=""0"" cellspacing=""0"" cellpadding=""4"" width=""100%"">" & vbcrlf
  605.   strOut = strOut & "          <tr><th colspan=""4"">" & SDB.Localize("Ratings") & "</th></tr>" & vbcrlf
  606.   strOut = strOut & "          <tr class=""aleft"">" & vbcrlf
  607.   strOut = strOut & "            <th>" & SDB.Localize("Tracks") & "</th>" & vbcrlf
  608.   strOut = strOut & "            <th>" & SDB.Localize("Rating") & "</th>" & vbcrlf
  609.   strOut = strOut & "            <th>" & SDB.Localize("Length") & "</th>" & vbcrlf
  610.   strOut = strOut & "            <th>" & SDB.Localize("File size") & "</th>" & vbcrlf
  611.   strOut = strOut & "          </tr>" & vbcrlf
  612.   strSQL = "SELECT Songs.Rating, Count(Songs.ID) AS CountOfID, Sum(SongLength) as TotalLength, Sum(FileLength) as TotalFileLength FROM Songs WHERE (((Songs.Rating)<>-1)) GROUP BY Songs.Rating ORDER BY Songs.Rating DESC"
  613.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  614.   While Not qryStats.EOF
  615.   strOut = strOut & "          <tr" & Style() & ">" & vbcrlf
  616.   strOut = strOut & "            <td>" & qryStats.StringByName("CountOfID") & "</td>" & vbcrlf
  617.   strOut = strOut & "            <td>" & ShowRating(qryStats.StringByName("Rating"),booForExport) & "</td>" & vbcrlf
  618.   strOut = strOut & "            <td>" & FormatTime(CCur(qryStats.ValueByName("TotalLength"))) & "</td>" & vbcrlf
  619.   strOut = strOut & "            <td>" & FormatFileSize(CCur(qryStats.ValueByName("TotalFileLength"))) & "</td>" & vbcrlf
  620.   strOut = strOut & "          </tr>" & vbcrlf
  621.     qryStats.Next
  622.   Wend
  623.   strOut = strOut & "        </table>" & vbcrlf
  624.   strOut = strOut & "      <p/>" & vbcrlf
  625.  
  626.   'rating played
  627.   strOut = strOut & "        <table border=""0"" cellspacing=""0"" cellpadding=""4"" width=""100%"">" & vbcrlf
  628.   strOut = strOut & "          <tr><th colspan=""4"">" & SDB.Localize("Ratings played") & "</th></tr>" & vbcrlf
  629.   strOut = strOut & "          <tr class=""aleft"">" & vbcrlf
  630.   strOut = strOut & "            <th>" & SDB.Localize("Tracks") & "</th>" & vbcrlf
  631.   strOut = strOut & "            <th>" & SDB.Localize("Rating") & "</th>" & vbcrlf
  632.   strOut = strOut & "            <th>" & SDB.Localize("Length") & "</th>" & vbcrlf
  633.   strOut = strOut & "            <th>" & SDB.Localize("File size") & "</th>" & vbcrlf
  634.   strOut = strOut & "          </tr>" & vbcrlf
  635.   strSQL = "SELECT Songs.Rating, Count(Songs.ID) AS CountOfID, Sum(SongLength) as TotalLength, Sum(FileLength) as TotalFileLength FROM Songs INNER JOIN Played ON Songs.ID = Played.IdSong WHERE (((Songs.Rating)<>-1)) GROUP BY Songs.Rating ORDER BY Songs.Rating DESC"
  636.   Set qryStats = SDB.Database.OpenSQL(strSQL)
  637.   While Not qryStats.EOF
  638.   strOut = strOut & "          <tr" & Style() & ">" & vbcrlf
  639.   strOut = strOut & "            <td>" & qryStats.StringByName("CountOfID") & "</td>" & vbcrlf
  640.   strOut = strOut & "            <td>" & ShowRating(qryStats.StringByName("Rating"),booForExport) & "</td>" & vbcrlf
  641.   strOut = strOut & "            <td>" & FormatTime(CCur(qryStats.ValueByName("TotalLength"))) & "</td>" & vbcrlf
  642.   strOut = strOut & "            <td>" & FormatFileSize(CCur(qryStats.ValueByName("TotalFileLength"))) & "</td>" & vbcrlf
  643.   strOut = strOut & "          </tr>" & vbcrlf
  644.     qryStats.Next
  645.   Wend
  646.   strOut = strOut & "        </table>" & vbcrlf
  647.   strOut = strOut & "      <p/>" & vbcrlf
  648.  
  649.   strOut = strOut & "      <table border=""0"" cellspacing=""0"" cellpadding=""4"" width=""100%"">" & vbcrlf
  650.   strOut = strOut & "        <tr><td style='border-bottom-width:0px'>" & vbcrlf
  651.   strOut = strOut & "          " & SDB.Localize("Generated by ") & "<a href='http://www.mediamonkey.com'>MediaMonkey</a>" & SDB.Localize(" on ") & MapXML(FormatDateTime(date(), vbLongDate)) & " " & SDB.Localize("at") & " " & MapXml(FormatDateTime(time(), vbLongTime))
  652.   strOut = strOut & "        </td></tr>" & vbcrlf
  653.   strOut = strOut & "      </table>" & vbcrlf
  654.   strOut = strOut & "    <p/>" & vbcrlf
  655.  
  656.   strOut = strOut & "  </body>" & vbcrlf
  657.   strOut = strOut & "</html>" & vbcrlf
  658.  
  659.   BuildReport = strOut
  660. End Function
  661.  
  662.